home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / win / pascal / scrgo.exe / MAUSHOOK.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-01-31  |  3.4 KB  |  125 lines

  1.  
  2. {$A+}   { Align data }
  3. {$B-}   { Boolean evaluation }
  4. {$E+}   { 80x87 emulator }
  5. {$F-}   { Force FAR calls }
  6. {$G+}   { 80286 code }
  7. {$I-}   { I/O checking }
  8. {$K-}   { Smart Callbacks }
  9. {$N-}   { 80x87 code }
  10. {$O-}   { Overlays allowed }
  11. {$P-}   { Open parameters }
  12. {$T-}   { Typed pointers }
  13. {$V-}   { String VAR checking }
  14. {$W-}   { Windows stack frame for real mode }
  15. {$X+}   { Extended syntax }
  16.  
  17. {$IFDEF DEBUG}
  18.     {$D+}   { Debug information }
  19.     {$L+}   { Local symbols }
  20.     {$Q+}   { Overflow checking }
  21.     {$R+}   { Range checking }
  22.     {$S+}   { Stack checking }
  23.     {$Y+}   { Symbol reference information }
  24. {$ELSE}
  25.     {$D-}   { Debug information }
  26.     {$L-}   { Local symbols }
  27.     {$Q-}   { Overflow checking }
  28.     {$R-}   { Range checking }
  29.     {$S-}   { Stack checking }
  30.     {$Y-}   { Symbol reference information }
  31. {$ENDIF}
  32.  
  33. {$M 1024,0}
  34.  
  35. {$C Fixed Preload Permanent} { Code Segment attributes }
  36.  
  37. LIBRARY MausHook;
  38.  
  39. {$D DLL for SCRSTART.EXE, by Olaf Hess}
  40.  
  41. USES WinTypes, WinProcs, Win31;
  42.  
  43. CONST
  44.     cTimeMin = 500; { 0.5 seconds }
  45.     cTimeMax = 2000; { 2 seconds }
  46.  
  47. VAR
  48.     hMouseHook : hHook;
  49.  
  50. (* ---- *)
  51.  
  52. FUNCTION MouseHookProc (iCode: Integer; wParam: Word;
  53.                         VAR lParam: TMouseHookStruct) : LongInt; export;
  54. { The hook function. Note that by making lParam a var-parameter lParam
  55.   remains 4 byte in size: It's the same as lParam: LongInt OR
  56.   lParam: Pointer. By declaring lParam as a variable OF TYPE
  57.   TMouseHookStruct we don't have to convert from pointer or longint to
  58.   TMouseHookStruct. }
  59.  
  60. CONST
  61.     lCurrentTime : LongInt = 0;
  62.     lPastTime : LongInt = 0;
  63.  
  64. BEGIN
  65.     IF (iCode >= 0) AND
  66.        ((wParam = wm_MouseMove) OR (wParam = wm_NcMouseMove)) THEN
  67.         { Valid iCode + mouse has been moved }
  68.         IF (lParam.pt.X <= 0) AND (lParam.pt.Y <= 0) THEN
  69.         BEGIN { Mouse pointer is in upper left corner }
  70.             lCurrentTime := GetTickCount; { Get time }
  71.  
  72.             IF (lCurrentTime <= (lPastTime + cTimeMin)) OR
  73.                (lCurrentTime >= (lPastTime + cTimeMax)) THEN
  74.                 { Time interval to small or to big }
  75.                 lPastTime := lCurrentTime
  76.             ELSE
  77.             BEGIN { Right time interval ->> start Screen Saver }
  78.                 PostMessage ($FFFF, wm_SysCommand, sc_ScreenSave, 0);
  79.                 lPastTime := 0;
  80.             END; { else }
  81.         END; { if }
  82.  
  83.     { Pass call through to the hook chain }
  84.     MouseHookProc := CallNextHookEx (hMouseHook, iCode, wParam,
  85.                                      LongInt (@lParam));
  86. END; { MouseHookProc }
  87.  
  88. (* ---- *)
  89.  
  90. FUNCTION InstallMouseHook : Boolean; export;
  91. { Set the mouse hook }
  92.  
  93. VAR
  94.     HookProc : THookProc;
  95.     pToMouseHookProc : TFarProc;
  96.  
  97. BEGIN
  98.     { This type conversion is necessary to fool the compiler }
  99.     pToMouseHookProc := TFarProc (@MouseHookProc);
  100.     { Set the hook }
  101.     hMouseHook := SetWindowsHookEx (wh_Mouse, THookProc (pToMouseHookProc),
  102.                                     hInstance, 0);
  103.     InstallMouseHook := hMouseHook <> 0;
  104. END; { InstallMouseHook }
  105.  
  106. (* ---- *)
  107.  
  108. PROCEDURE RemoveMouseHook; export;
  109. { Romove the hook from the chain }
  110.  
  111. BEGIN
  112.     UnHookWindowsHookEx (hMouseHook); 
  113. END; { RemoveMouseHook }
  114.  
  115. (* ---- *)
  116.  
  117. EXPORTS InstallMouseHook index 1;
  118. EXPORTS RemoveMouseHook index 2;
  119.  
  120. (* ---- *)
  121.  
  122. BEGIN { MausHook }
  123.     hMouseHook := 0;
  124. END. { MausHook }
  125.